package com.bluefox.modules.system.service;

import com.bluefox.modules.system.criteria.DeptQueryCriteria;
import com.bluefox.modules.system.domain.vo.TreeSelect;
import com.bluefox.modules.system.service.dto.SysDeptDto;
import com.bluefox.modules.system.domain.SysDept;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Set;

import org.springframework.data.domain.Page;

/**
 * (SysDept)表服务接口
 *
 * @author sunfeng
 * @since 2020-04-17 13:35:47
 */
public interface SysDeptService {
    /**
     * 根据ID查询
     *
     * @param deptId /
     * @return /
     */
    SysDeptDto findById(Long deptId);


    /**
     * 创建
     *
     * @param sysDept /
     * @return /
     */
    SysDeptDto insert(SysDeptDto sysDept);

    /**
     * 跟新
     *
     * @param sysDept /
     * @return /
     */
    SysDeptDto update(SysDeptDto sysDept);

    /**
     * 根据id删除
     *
     * @param deptId /
     * @return /
     */
    boolean deleteById(Long deptId);

    /**
     * 查询所有
     *
     * @return /
     */
    List<SysDeptDto> findAll();

    /**
     * @param id
     * @return
     */
    List<SysDeptDto> findByPid(Long id);

    Set<SysDept> findByRoleId(Long roleId);

    /**
     * 查询部门管理数据
     *
     * @param dept 部门信息
     * @return 部门信息集合
     */
    List<SysDeptDto> selectDeptList(DeptQueryCriteria dept);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param depts 部门列表
     * @return 下拉树结构列表
     */
    List<TreeSelect> buildDeptTreeSelect(List<SysDeptDto> depts);

    /**
     * 构建前端所需要树结构
     *
     * @param depts 部门列表
     * @return 树结构列表
     */
    public List<SysDeptDto> buildDeptTree(List<SysDeptDto> depts);

    /**
     *  根据角色id 获取部门集合
     * @param roleId
     * @return
     */
    List<SysDeptDto> selectDeptListByRoleId(Long roleId);
    /**
     * 获取
     * @param deptId
     * @param deptChildren
     * @return
     */
    Collection<? extends Long> getDeptChildren(Long deptId, List<SysDept> deptChildren);

    List<SysDeptDto> queryAll(DeptQueryCriteria criteria, boolean b);
}
